Twitterのタイムラインの内容をRichTextBoxやTextBlockで表示する(リンクの付加など)ためのコード
(CoreTweet使用)
Twitterのタイムラインの内容をRichTextBoxやTextBlockで表示する(リンクの付加など)ためのコード
(CoreTweet使用)
public static void TwitterObectToInline(InlineCollection inlines, CoreTweet.Core.CoreBase obj, bool clearInlines = false) { if (obj == null || obj == null) return; // 内容の消去 if (clearInlines) inlines.Clear(); string text = null; IList<Entity> dic = null; // エンティティのリスト作成 if (obj is Status) { var status = (Status)obj; text = status.Text; dic = ConcatArray<Entity>( // エンティティの結合 status.Entities.UserMentions, status.Entities.Urls, status.Entities.Symbols, status.Entities.Media, status.Entities.HashTags); } else if (obj is DirectMessage) { var message = (DirectMessage)obj; text = message.Text; dic = ConcatArray<Entity>( message.Entities.UserMentions, message.Entities.Urls, message.Entities.Symbols, message.Entities.Media, message.Entities.HashTags); } if (dic == null) return; if (dic.Count > 0) { // エンティティが含まれている場合 // エンティティの出現番号順に並び替え dic = dic.OrderBy(entity => entity.Indices[0]).ToList(); // エンティティの開始が0文字目で無い場合に文字列を挿入 if (dic[0].Indices[0] != 0) inlines.Add(HttpUtility.HtmlDecode(text.Substring(0, dic[0].Indices[0]))); // エンティティの追加 dic.ForEach((entity, index) => { // *** リンクの生成 *** var link = new Hyperlink() { Cursor = Cursors.Hand, }; if (entity is UserMentionEntity) { var user = (UserMentionEntity)entity; link.Inlines.Add(string.Format("@{0}", user.ScreenName)); } else if (entity is UrlEntity) { var url = (UrlEntity)entity; link.Inlines.Add(url.DisplayUrl); } else if (entity is SymbolEntity) { var symbol = (SymbolEntity)entity; link.Inlines.Add(string.Format("{0}{1}", text[symbol.Indices[0]] == '$' ? '$' : '#', symbol.Text)); } else if (entity is MediaEntity) { var media = (MediaEntity)obj; link.Inlines.Add(media.MediaUrl.AbsoluteUri); } inlines.Add(link); // *** エンティティ間/前後の文字列の挿入 *** var len = entity.Indices[1]; // エンティティの文字列の最終 if (len != text.Length) { if (dic.Count > index + 1) inlines.Add(HttpUtility.HtmlDecode( text.Substring(len, dic[index + 1].Indices[0] - len))); else inlines.Add(HttpUtility.HtmlDecode( text.Substring(len, text.Length - len))); } }); } else inlines.Add(HttpUtility.HtmlDecode(text)); dic.Clear(); dic = null; }